/**
 * 
 *   @author   周建建
 *   start_time    2019-12-12
 * 
 */

! function ($wx, ...$list) {
  /**
   *   @method
   *   @param {Array}  arrays
   *   arrays  分别为: [路由地址，参数，请求方式,如需回调请传函数]
   */
  $wx.$ajax = (...arrays) => {
    // console.log(arrays, '传入参数');
    // console.log(wx.$config.serverAddress, '传输地址');
    let openid = null,
      nums = 0,
      URL_ =
      wx.$config.serverAddress + arrays[0];
    let data = {
      token: wx.getStorageSync("token") || '',
      data: arrays[1] || {}
    }
    return new Promise(
      (resolve, reject) => {
        wx.request({
          url: URL_,
          data: JSON.stringify(data),
          dataType: 'json',
          method: arrays[2] || 'POST',
          header: arrays[3] ? arrays[3] : {
            'content-type': 'application/x-www-form-urlencoded'
          },
          timeout: 20000,
          success: res => {
            resolve(res)
            typeof arrays[3] == "function" ? arrays(res) : null
          },
          fail: err => {
            reject(err)
          },
          complete: all => {
            wx.hideLoading();
            wx.hideToast();

            wx.hideNavigationBarLoading();
            // console.log("all", all)
            if (all.statusCode != 200) {
              wx.reLaunch({
                url: '/pages/error/error',
              })
            } else {
              console.log(URL_,'::::::::URL_')
              if (all.data.code == 401) {
                wx.showModal({
                  title: '登录过期',
                  content: '登录已过期，请重新登录',
                  cancelText: "取消",
                  confirmText: "重新登录",
                  confirmColor: "red",
                  cancelColor: "#56D53B",
                  success: res => {
                    if (res.confirm) {
                      wx.clearStorage()
                      getApp().getOpenId();
                    }
                  }
                })
              } else {
                reject(all)
              }
            }
          }
        })
      }
    )
  }
  /**
   *   @method
   *   @param {Array}  arrays
   *   arrays  分别为: [字段名，0升序  1降序  【字段比大小】]
   */
  $wx.$sort = (...arrays) => {
    return function (a, b) {
      var value1 = a[arrays[0]];
      var value2 = b[arrays[0]];
      if (arrays[1] == 1) {
        return value2 - value1;
      } else {
        return value1 - value2;
      }
    }
  }
  /**
   *   @method
   *   @param {Array}  arrays
   *   arrays  分别为: [数组 [{}]，字段名称,0升序  1降序  【字段比大小】]
   */
  $wx.$sortTime = (...arrays) => {
    arrays[0].sort(function (a, b) {
      if (arrays[2] == 1) {
        return Date.parse(a[arrays[1]]) - Date.parse(b[arrays[1]]); //时间正序
      } else {
        return Date.parse(b[arrays[1]]) - Date.parse(a[arrays[1]])
      }
    });
    return arrays[0]
  }
  /**
   *   @method
   *   @param {Array}  arrays
   *   arrays  分别为: [数组 [{}]，字段名称]
   */
  $wx.$Distinct = (...arrays) => {
    var hash = {};
    return arrays[0].reduce(function (item, next) {
      hash[next[arrays[1]]] ? '' : hash[next[arrays[1]]] = true && item.push(next);
      return item;
    }, []);
  }
  /**
   *   @method
   *   缓存手机设备信息
   *   手机高度、宽度、iphonex~苹果手机 特定高度问题
   */
  $wx.$facility = () => {
    let set_s = wx.setStorageSync;
    wx.getSystemInfo({
      success: function (res) {
        let totalTopHeight = 68
        if (res.model.indexOf('iPhone X') !== -1) {
          totalTopHeight = 88
        } else if (res.model.indexOf('iPhone') !== -1) {
          totalTopHeight = 64
        }
        set_s('statusBarHeight', res.statusBarHeight);
        set_s('titleBarHeight', totalTopHeight - res.statusBarHeight);
        set_s("phoneW", res.screenWidth);
        set_s("phoneH", res.screenHeight);
        $wx.phoneH = res.screenHeight || 0;
        $wx.phoneW = res.screenWidth || 0;
      },
      failure() {
        set_s('statusBarHeight', 0)
        set_s('titleBarHeight', 0)
      }
    })
  }


  /**
   *  @method
   *  @param {String}  title
   *  @param  {Number}  time
   *  弹框提示
   * 
   */
  $wx.$title = (title, time) => {
    wx.showToast({
      title: title,
      icon: 'none',
      duration: time || 1000
    })
  }

  /**
   *  @method
   *  @param  {String}  url
   *  @param  {Array}  urlList
   *  图片阅览
   * 
   */
  $wx.$imgRead = (url, urlList) => {
    wx.previewImage({
      current: url, // 当前显示图片的http链接
      urls: urlList ? urlList : [url] // 需要预览的图片http链接列表
    })
  }

  /**
   *  @method
   *  @param  {String}  title
   *  设置字体
   * 
   */
  $wx.$setTop = (title) => {
    wx.setNavigationBarTitle({
      title: title
    })
  }


  /**
   *  @method
   *  @param  {String}  fc   
   * @param   {String}  bc
   *  设置顶部背景颜色
   * 
   */
  $wx.$setTopBk = (fc, bc) => {
    wx.setNavigationBarColor({
      frontColor: fc || '#000000',
      backgroundColor: bc || '#ffffff',
      animation: {
        duration: 400,
        timingFunc: 'easeIn'
      }
    })
  }


  /**
   *  @method
   *  @param   {Number}  num
   *  @param   {Number}  time
   *  设置页面滚动的位置
   * 
   */
  $wx.$scrollTop = (num, time) => {
    wx.pageScrollTo({
      scrollTop: num || 0,
      duration: time || 300
    })
  }

  /**
   *  @method
   *  @param   {Array}  arr
   *  @param   {String}  key
   *  去重  传入(数组, 去重字段名)
   * 
   */
  $wx.$unique = (arr, key) => {
    const res = new Map();
    return arr.filter((a) => !res.has(a[key]) && res.set(a[key], 1))
  }
  $wx.$isBank = (str) =>{
    return /^([1-9]{1})(\d{15}|\d{18})$/.test(str)
  }
  /**
   *  判断是否是手机号码
   */
  $wx.$isMobile = (str) => {
    return /^(13|14|15|16|17|18|19)\d{9}$/i.test(str);
  }
  /**
   *  判断是否是邮箱
   */
  $wx.$isEmail = (str) => {
    return /^([a-zA-Z\d])(\w|\-)+@[a-zA-Z\d]+\.[a-zA-Z]{2,4}$/.test(str);
  }
  /**
   * 判断是否是身份证
   */
  $wx.$isCard = (str) => {
    return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(str)
  }


}(typeof wx == "object" ? wx : new Object(),
  wx.$config,

)